#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    pid_t pc, pr;
    if ((pc = fork()) == -1)
    {
        printf("faild to create a new process\n");
        exit(0);
    }
    else if (pc == 0)
    {
        sleep(10);
        exit(0);
    }

    do
    {
        pr = waitpid(pc, NULL, WNOHANG); //使用了WNOHANG参数，waitpid不会在这里等待
        if (pr == 0)                     //如果没有收集到子进程
        {
            printf("No child exited\n");
            sleep(1);
        }
    } while (pr == 0); //没有收集到子进程，就继续尝试
    if (pr == pc)
    {
        printf("successfully get child %d\n", pr);
    }
    else
    {
        printf("some error occured\n");
    }
    return 0;
}

// wait函数可以用于父进程有多个子进程的情况，但它只能等待任意一个子进程的终止状态。
// 在循环中使用wait函数，可以逐个处理每个子进程的终止状态。
// 如果需要按照特定顺序等待和处理子进程，可以使用waitpid函数，并指定要等待的子进程的PID。
//对于WNOHANG的解释：waitpid()函数在没有可用的子进程退出状态时立即返回，而不是阻塞等待。
